﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Game.model.worldstatistics
{
    public class CategoryType
    {
        private readonly string _name;
        //private readonly int value;
        private readonly int _id;
	    private readonly int _subcat;
	    private readonly int _saveMode;
        private CategoryType(string name,int id)
	    {
		    _id = id;
		    _subcat = 0;
            _name = name;
		    _saveMode = UPDATE_STATISTIC_MODE_ADD;

	    }

	    private CategoryType(string name,int id, int subcat)
	    {
		    _id = id;
            _name = name;
		    _subcat = subcat;
		    _saveMode = UPDATE_STATISTIC_MODE_ADD;
	    }

	    private CategoryType(string name,int id, int subcat, int saveMode)
	    {
		    _id = id;
		    _subcat = subcat;
            _name = name;
		    _saveMode = saveMode;
	    }
        public static CategoryType getCategoryById(int catId, int subcatId)
	    {
		    foreach (CategoryType category in Values)
		    {
			    if ((category.getClientId() == catId) && (category.getSubcat() == subcatId))
				    return category;
		    }
		    return null;
	    }

	    public int getClientId()
	    {
		    return _id;
	    }

	    public int getSubcat()
	    {
		    return _subcat;
	    }

	    public int getSaveMode()
	    {
		    return _saveMode;
	    }
        // General section
        public static readonly CategoryType EXP_ADDED=new CategoryType("EXP_ADDED",0);
        public static readonly CategoryType ADENA_ADDED = new CategoryType("ADENA_ADDED", 1);
        public static readonly CategoryType TIME_PLAYED = new CategoryType("TIME_PLAYED", 2);
        public static readonly CategoryType TIME_IN_BATTLE=new CategoryType("TIME_IN_BATTLE",3);
        public static readonly CategoryType TIME_IN_PARTY=new CategoryType("TIME_IN_PARTY",4);
        public static readonly CategoryType TIME_IN_FULLPARTY=new CategoryType("TIME_IN_FULLPARTY",5);

        public static readonly CategoryType WEAPON_ENCHANT_MAX = new CategoryType("WEAPON_ENCHANT_MAX", 21);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_D=new CategoryType("WEAPON_ENCHANT_MAX_D",21, 1, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_C=new CategoryType("WEAPON_ENCHANT_MAX_C",21, 2, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_B=new CategoryType("WEAPON_ENCHANT_MAX_B",21, 3, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_A=new CategoryType("WEAPON_ENCHANT_MAX_A",21, 4, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_S=new CategoryType("WEAPON_ENCHANT_MAX_S",21, 5, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_S80=new CategoryType("WEAPON_ENCHANT_MAX_S80",21, 6, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_S84=new CategoryType("WEAPON_ENCHANT_MAX_S84",21, 7, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_R=new CategoryType("WEAPON_ENCHANT_MAX_R",21, 8, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_R95=new CategoryType("WEAPON_ENCHANT_MAX_R95",21,10,UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_MAX_R99 = new CategoryType("WEAPON_ENCHANT_MAX_R99", 21, 11, UPDATE_STATISTIC_MODE_REPLACE);

        public static readonly CategoryType ARMOR_ENCHANT_MAX = new CategoryType("ARMOR_ENCHANT_MAX", 23);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_D = new CategoryType("ARMOR_ENCHANT_MAX_D", 23, 1, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_C = new CategoryType("ARMOR_ENCHANT_MAX_C", 23, 2, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_B = new CategoryType("ARMOR_ENCHANT_MAX_B", 23, 3, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_A = new CategoryType("ARMOR_ENCHANT_MAX_A", 23, 4, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_S = new CategoryType("ARMOR_ENCHANT_MAX_S", 23, 5, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_S80 = new CategoryType("ARMOR_ENCHANT_MAX_S80", 23, 6, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_S84 = new CategoryType("ARMOR_ENCHANT_MAX_S84", 23, 7, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_R = new CategoryType("ARMOR_ENCHANT_MAX_R", 23, 8, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_R95 = new CategoryType("ARMOR_ENCHANT_MAX_R95", 23, 10, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_MAX_R99 = new CategoryType("ARMOR_ENCHANT_MAX_R99", 23, 11, UPDATE_STATISTIC_MODE_REPLACE);

        public static readonly CategoryType WEAPON_ENCHANT_TRY = new CategoryType("WEAPON_ENCHANT_TRY", 22);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_D = new CategoryType("WEAPON_ENCHANT_TRY_D", 22, 1, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_C = new CategoryType("WEAPON_ENCHANT_TRY_C", 22, 2, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_B = new CategoryType("WEAPON_ENCHANT_TRY_B", 22, 3, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_A = new CategoryType("WEAPON_ENCHANT_TRY_A", 22, 4, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_S = new CategoryType("WEAPON_ENCHANT_TRY_S", 22, 5, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_S80 = new CategoryType("WEAPON_ENCHANT_TRY_S80", 22, 6, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_S84 = new CategoryType("WEAPON_ENCHANT_TRY_S84", 22, 7, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_R = new CategoryType("WEAPON_ENCHANT_TRY_R", 22, 8, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_R95 = new CategoryType("WEAPON_ENCHANT_TRY_R95", 22, 10, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType WEAPON_ENCHANT_TRY_R99 = new CategoryType("WEAPON_ENCHANT_TRY_R99", 22, 11, UPDATE_STATISTIC_MODE_REPLACE);

        public static readonly CategoryType ARMOR_ENCHANT_TRY = new CategoryType("ARMOR_ENCHANT_TRY", 24);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_D = new CategoryType("ARMOR_ENCHANT_TRY_D", 24, 1, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_C = new CategoryType("ARMOR_ENCHANT_TRY_C", 24, 2, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_B = new CategoryType("ARMOR_ENCHANT_TRY_B", 24, 3, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_A = new CategoryType("ARMOR_ENCHANT_TRY_A", 24, 4, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_S = new CategoryType("ARMOR_ENCHANT_TRY_S", 24, 5, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_S80 = new CategoryType("ARMOR_ENCHANT_TRY_S80", 24, 6, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_S84 = new CategoryType("ARMOR_ENCHANT_TRY_S84", 24, 7, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_R = new CategoryType("ARMOR_ENCHANT_TRY_R", 24, 8, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_R95 = new CategoryType("ARMOR_ENCHANT_TRY_R95", 24, 10, UPDATE_STATISTIC_MODE_REPLACE);
        public static readonly CategoryType ARMOR_ENCHANT_TRY_R99 = new CategoryType("ARMOR_ENCHANT_TRY_R99", 24, 11, UPDATE_STATISTIC_MODE_REPLACE);

        public static readonly CategoryType PRIVATE_SELL_COUNT = new CategoryType("PRIVATE_SELL_COUNT",11);
        public static readonly CategoryType QUESTS_COMPLETED=new CategoryType("QUESTS_COMPLETED",12);

	    public static readonly CategoryType SS_CONSUMED=new CategoryType("SS_CONSUMED",13);
        public static readonly CategoryType SS_CONSUMED_D = new CategoryType("SS_CONSUMED_D",13, 1);
        public static readonly CategoryType SS_CONSUMED_C = new CategoryType("SS_CONSUMED_C", 13, 2);
        public static readonly CategoryType SS_CONSUMED_B = new CategoryType("SS_CONSUMED_B", 13, 3);
        public static readonly CategoryType SS_CONSUMED_A = new CategoryType("SS_CONSUMED_A", 13, 4);
        public static readonly CategoryType SS_CONSUMED_S = new CategoryType("SS_CONSUMED_S", 13, 5);
        public static readonly CategoryType SS_CONSUMED_R = new CategoryType("SS_CONSUMED_R", 13, 8);

        // SS & BSS
        public static readonly CategoryType SPS_CONSUMED = new CategoryType("SPS_CONSUMED", 14);
        public static readonly CategoryType SPS_CONSUMED_D = new CategoryType("SPS_CONSUMED_D", 14,1);
        public static readonly CategoryType SPS_CONSUMED_C = new CategoryType("SPS_CONSUMED_C", 14,2);
        public static readonly CategoryType SPS_CONSUMED_B = new CategoryType("SPS_CONSUMED_B", 14,3);
        public static readonly CategoryType SPS_CONSUMED_A = new CategoryType("SPS_CONSUMED_A", 14,4);
        public static readonly CategoryType SPS_CONSUMED_S = new CategoryType("SPS_CONSUMED_S", 14,5);
        public static readonly CategoryType SPS_CONSUMED_R = new CategoryType("SPS_CONSUMED_R", 14,8);

        public static readonly CategoryType RESURRECTED_CHAR_COUNT=new CategoryType("RESURRECTED_CHAR_COUNT",18);
	    public static readonly CategoryType RESURRECTED_BY_OTHER_COUNT=new CategoryType("RESURRECTED_BY_OTHER_COUNT",19);

        public static readonly CategoryType DIE_COUNT = new CategoryType("DIE_COUNT", 20);
        // Hunting field section
        public static readonly CategoryType MONSTERS_KILLED=new CategoryType("MONSTERS_KILLED",1000);
	    public static readonly CategoryType EXP_FROM_MONSTERS=new CategoryType("EXP_FROM_MONSTERS",1001); // TODO
	    public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX=new CategoryType("DAMAGE_TO_MONSTERS_MAX",1003, UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX_SIGEL_KNIGHT =
            new CategoryType("DAMAGE_TO_MONSTERS_MAX_SIGEL_KNIGHT", 1003, 139, UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX_TYRR_WARRIOR =
            new CategoryType("DAMAGE_TO_MONSTERS_MAX_TYRR_WARRIOR", 1003, 140, UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX_YUL_ARCHER =
            new CategoryType("DAMAGE_TO_MONSTERS_MAX_YUL_ARCHER", 1003, 141, UPDATE_STATISTIC_MODE_INSERT_MAX);
        public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX_OTHELL_ROGUE = new CategoryType("DAMAGE_TO_MONSTERS_MAX_OTHELL_ROGUE", 1003, 142, UPDATE_STATISTIC_MODE_INSERT_MAX);
        public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX_ISS_ENCHANTER =
            new CategoryType("DAMAGE_TO_MONSTERS_MAX_ISS_ENCHANTER", 1003, 143, UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX_FEOH_WIZARD =
            new CategoryType("DAMAGE_TO_MONSTERS_MAX_FEOH_WIZARD", 1003, 144, UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX_WYNN_SUMMONER =
            new CategoryType("DAMAGE_TO_MONSTERS_MAX_WYNN_SUMMONER", 1003, 145, UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_MONSTERS_MAX_AEORE_HEALER =
            new CategoryType("DAMAGE_TO_MONSTERS_MAX_AEORE_HEALER", 1003, 146, UPDATE_STATISTIC_MODE_INSERT_MAX);
	    public static readonly CategoryType DAMAGE_TO_MONSTERS=new CategoryType("DAMAGE_TO_MONSTERS",1004);
        public static readonly CategoryType DAMAGE_TO_MONSTERS_SIGEL_KNIGHT = new CategoryType("DAMAGE_TO_MONSTERS_SIGEL_KNIGHT",1004, 139);
	    public static readonly CategoryType DAMAGE_TO_MONSTERS_TYRR_WARRIOR=new CategoryType("DAMAGE_TO_MONSTERS_TYRR_WARRIOR",1004, 140);
        public static readonly CategoryType DAMAGE_TO_MONSTERS_YUL_ARCHER = new CategoryType("DAMAGE_TO_MONSTERS_YUL_ARCHER",1004, 141);
        public static readonly CategoryType DAMAGE_TO_MONSTERS_OTHELL_ROGUE = new CategoryType("DAMAGE_TO_MONSTERS_OTHELL_ROGUE",1004, 142);
        public static readonly CategoryType DAMAGE_TO_MONSTERS_ISS_ENCHANTER = new CategoryType("DAMAGE_TO_MONSTERS_ISS_ENCHANTER",1004, 143);
        public static readonly CategoryType DAMAGE_TO_MONSTERS_FEOH_WIZARD = new CategoryType("DAMAGE_TO_MONSTERS_FEOH_WIZARD",1004, 144);
	    public static readonly CategoryType DAMAGE_TO_MONSTERS_WYNN_SUMMONER=new CategoryType("DAMAGE_TO_MONSTERS_WYNN_SUMMONER",1004, 145);
	    public static readonly CategoryType DAMAGE_TO_MONSTERS_AEORE_HEALER=new CategoryType("DAMAGE_TO_MONSTERS_AEORE_HEALER",1004, 146);
	    public static readonly CategoryType DAMAGE_FROM_MONSTERS=new CategoryType("DAMAGE_FROM_MONSTERS",1005);
	    public static readonly CategoryType DAMAGE_FROM_MONSTERS_SIGEL_KNIGHT=new CategoryType("DAMAGE_FROM_MONSTERS_SIGEL_KNIGHT",1005, 139);
	    public static readonly CategoryType DAMAGE_FROM_MONSTERS_TYRR_WARRIOR=new CategoryType("DAMAGE_FROM_MONSTERS_TYRR_WARRIOR",1005, 140);
        public static readonly CategoryType DAMAGE_FROM_MONSTERS_YUL_ARCHER = new CategoryType("DAMAGE_FROM_MONSTERS_YUL_ARCHER",1005, 141);
        public static readonly CategoryType DAMAGE_FROM_MONSTERS_OTHELL_ROGUE = new CategoryType("DAMAGE_FROM_MONSTERS_OTHELL_ROGUE",1005, 142);
        public static readonly CategoryType DAMAGE_FROM_MONSTERS_ISS_ENCHANTER = new CategoryType("DAMAGE_FROM_MONSTERS_ISS_ENCHANTER",1005, 143);
        public static readonly CategoryType DAMAGE_FROM_MONSTERS_FEOH_WIZARD = new CategoryType("DAMAGE_FROM_MONSTERS_FEOH_WIZARD",1005, 144);
        public static readonly CategoryType DAMAGE_FROM_MONSTERS_WYNN_SUMMONER = new CategoryType("DAMAGE_FROM_MONSTERS_WYNN_SUMMONER",1005, 145);
        public static readonly CategoryType DAMAGE_FROM_MONSTERS_AEORE_HEALER = new CategoryType("DAMAGE_FROM_MONSTERS_AEORE_HEALER",1005, 146);
        public static readonly CategoryType KILLED_BY_MONSTER_COUNT = new CategoryType("KILLED_BY_MONSTER_COUNT", 1002);
        
        // Raid section
	    public static readonly CategoryType EPIC_BOSS_KILLS=new CategoryType("EPIC_BOSS_KILLS",1006);
        public static readonly CategoryType EPIC_BOSS_KILLS_25774 = new CategoryType("EPIC_BOSS_KILLS_25774",1006, 1025774);
	    public static readonly CategoryType EPIC_BOSS_KILLS_25785=new CategoryType("EPIC_BOSS_KILLS_25785",1006, 1025785);
        public static readonly CategoryType EPIC_BOSS_KILLS_29195 = new CategoryType("EPIC_BOSS_KILLS_29195",1006, 1029195);
	    public static readonly CategoryType EPIC_BOSS_KILLS_25779=new CategoryType("EPIC_BOSS_KILLS_25779",1006, 1025779);
        public static readonly CategoryType EPIC_BOSS_KILLS_25866 = new CategoryType("EPIC_BOSS_KILLS_25866", 1006, 1025866);
        public static readonly CategoryType EPIC_BOSS_KILLS_29194 = new CategoryType("EPIC_BOSS_KILLS_29194", 1006, 1029194);
	    public static readonly CategoryType EPIC_BOSS_KILLS_29218=new CategoryType("EPIC_BOSS_KILLS_29218",1006, 1029218);
	    public static readonly CategoryType EPIC_BOSS_KILLS_29213=new CategoryType("EPIC_BOSS_KILLS_29213",1006, 1029213);
	    public static readonly CategoryType EPIC_BOSS_KILLS_29196=new CategoryType("EPIC_BOSS_KILLS_29196",1006, 1029196);
        public static readonly CategoryType EPIC_BOSS_KILLS_25867 = new CategoryType("EPIC_BOSS_KILLS_25867", 1006, 1025867);
        public static readonly CategoryType EPIC_BOSS_KILLS_29212 = new CategoryType("EPIC_BOSS_KILLS_29212", 1006, 1029212);
        public static readonly CategoryType EPIC_BOSS_KILLS_29197 = new CategoryType("EPIC_BOSS_KILLS_29197", 1006, 1029197);
        
        // PVP section
        public static readonly CategoryType PK_COUNT = new CategoryType("PK_COUNT", 2004);
        public static readonly CategoryType PVP_COUNT = new CategoryType("PVP_COUNT", 2005);
        public static readonly CategoryType KILLED_BY_PK_COUNT = new CategoryType("KILLED_BY_PK_COUNT", 2001);
        public static readonly CategoryType KILLED_IN_PVP_COUNT = new CategoryType("KILLED_IN_PVP_COUNT", 2002);

        public static readonly CategoryType DAMAGE_TO_PC_MAX = new CategoryType("DAMAGE_TO_PC_MAX", 2006,
                                                                                UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC_MAX_SIGEL_KNIGHT = new CategoryType("DAMAGE_TO_PC_MAX_SIGEL_KNIGHT",2006, 139,
                                                                                             UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC_MAX_TYRR_WARRIOR = new CategoryType("DAMAGE_TO_PC_MAX_TYRR_WARRIOR",2006, 140,
                                                                                             UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC_MAX_YUL_ARCHER = new CategoryType("DAMAGE_TO_PC_MAX_YUL_ARCHER",2006, 141,
                                                                                           UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC_MAX_OTHELL_ROGUE = new CategoryType("DAMAGE_TO_PC_MAX_OTHELL_ROGUE",2006, 142,
                                                                                             UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC_MAX_ISS_ENCHANTER = new CategoryType("DAMAGE_TO_PC_MAX_ISS_ENCHANTER",2006, 143,
                                                                                              UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC_MAX_FEOH_WIZARD = new CategoryType("DAMAGE_TO_PC_MAX_FEOH_WIZARD",2006, 144,
                                                                                            UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC_MAX_WYNN_SUMMONER = new CategoryType("DAMAGE_TO_PC_MAX_WYNN_SUMMONER",2006, 145,
                                                                                              UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC_MAX_AEORE_HEALER = new CategoryType("DAMAGE_TO_PC_MAX_AEORE_HEALER",2006, 146,
                                                                                             UPDATE_STATISTIC_MODE_INSERT_MAX);

        public static readonly CategoryType DAMAGE_TO_PC = new CategoryType("DAMAGE_TO_PC", 2007);
        public static readonly CategoryType DAMAGE_TO_PC_SIGEL_KNIGHT = new CategoryType("DAMAGE_TO_PC_SIGEL_KNIGHT", 2007, 139);
        public static readonly CategoryType DAMAGE_TO_PC_TYRR_WARRIOR = new CategoryType("DAMAGE_TO_PC_TYRR_WARRIOR", 2007, 140);
        public static readonly CategoryType DAMAGE_TO_PC_YUL_ARCHER = new CategoryType("DAMAGE_TO_PC_YUL_ARCHER", 2007, 141);
        public static readonly CategoryType DAMAGE_TO_PC_OTHELL_ROGUE = new CategoryType("DAMAGE_TO_PC_OTHELL_ROGUE", 2007, 142);
        public static readonly CategoryType DAMAGE_TO_PC_ISS_ENCHANTER = new CategoryType("DAMAGE_TO_PC_ISS_ENCHANTER", 2007, 143);
        public static readonly CategoryType DAMAGE_TO_PC_FEOH_WIZARD = new CategoryType("DAMAGE_TO_PC_FEOH_WIZARD", 2007, 144);
        public static readonly CategoryType DAMAGE_TO_PC_WYNN_SUMMONER = new CategoryType("DAMAGE_TO_PC_WYNN_SUMMONER", 2007, 145);
        public static readonly CategoryType DAMAGE_TO_PC_AEORE_HEALER = new CategoryType("DAMAGE_TO_PC_AEORE_HEALER", 2007, 146);
        public static readonly CategoryType DAMAGE_FROM_PC = new CategoryType("DAMAGE_FROM_PC", 2008);
        public static readonly CategoryType DAMAGE_FROM_PC_SIGEL_KNIGHT = new CategoryType("DAMAGE_FROM_PC_SIGEL_KNIGHT", 2008, 139);
        public static readonly CategoryType DAMAGE_FROM_PC_TYRR_WARRIOR = new CategoryType("DAMAGE_FROM_PC_TYRR_WARRIOR", 2008, 140);
        public static readonly CategoryType DAMAGE_FROM_PC_YUL_ARCHER = new CategoryType("DAMAGE_FROM_PC_YUL_ARCHER", 2008, 141);
        public static readonly CategoryType DAMAGE_FROM_PC_OTHELL_ROGUE = new CategoryType("DAMAGE_FROM_PC_OTHELL_ROGUE", 2008, 142);
        public static readonly CategoryType DAMAGE_FROM_PC_ISS_ENCHANTER = new CategoryType("DAMAGE_FROM_PC_ISS_ENCHANTER", 2008, 143);
        public static readonly CategoryType DAMAGE_FROM_PC_FEOH_WIZARD = new CategoryType("DAMAGE_FROM_PC_FEOH_WIZARD", 2008, 144);
        public static readonly CategoryType DAMAGE_FROM_PC_WYNN_SUMMONER = new CategoryType("DAMAGE_FROM_PC_WYNN_SUMMONER", 2008, 145);
        public static readonly CategoryType DAMAGE_FROM_PC_AEORE_HEALER = new CategoryType("DAMAGE_FROM_PC_AEORE_HEALER", 2008, 146);
        
        // Clan section
        public static readonly CategoryType MEMBERS_COUNT = new CategoryType("MEMBERS_COUNT", 3000,
                                                                             UPDATE_STATISTIC_MODE_REPLACE); // TODO[K] - released
	    // this category in
	    // WSManager
        public static readonly CategoryType INVITED_COUNT = new CategoryType("INVITED_COUNT", 3001); // TODO[K] - released this category in WSManager
        public static readonly CategoryType LEAVED_COUNT = new CategoryType("LEAVED_COUNT", 3002); // TODO[K] - released this category in WSManager
        public static readonly CategoryType REPUTATION_COUNT = new CategoryType("REPUTATION_COUNT", 3003); // TODO[K] - released this category in WSManager
        public static readonly CategoryType ADENA_COUNT_IN_WH = new CategoryType("ADENA_COUNT_IN_WH", 3004); // TODO[K] - released this category in WSManager
        public static readonly CategoryType ALL_CLAN_PVP_COUNT = new CategoryType("ALL_CLAN_PVP_COUNT", 3005); // TODO[K] - released this category in WSManager
        public static readonly CategoryType CLAN_WAR_WIN_COUNT = new CategoryType("CLAN_WAR_WIN_COUNT", 3006); // TODO[K] - released this category in WSManager
        public static IEnumerable<CategoryType> Values
        {
            get
            {
                yield return EXP_ADDED;
                yield return ADENA_ADDED;
                yield return TIME_PLAYED;
                yield return TIME_IN_BATTLE;
                yield return TIME_IN_PARTY;
                yield return TIME_IN_FULLPARTY;
                yield return WEAPON_ENCHANT_MAX;
                yield return WEAPON_ENCHANT_MAX_D;
                yield return WEAPON_ENCHANT_MAX_C;
                yield return WEAPON_ENCHANT_MAX_B;
                yield return WEAPON_ENCHANT_MAX_S;
                yield return WEAPON_ENCHANT_MAX_S80;
                yield return WEAPON_ENCHANT_MAX_S84;
                yield return WEAPON_ENCHANT_MAX_R;
                yield return WEAPON_ENCHANT_MAX_R95;
                yield return WEAPON_ENCHANT_MAX_R99;
                yield return ARMOR_ENCHANT_MAX;
                yield return ARMOR_ENCHANT_MAX_D;
                yield return ARMOR_ENCHANT_MAX_C;
                yield return ARMOR_ENCHANT_MAX_B;
                yield return ARMOR_ENCHANT_MAX_S;
                yield return ARMOR_ENCHANT_MAX_S80;
                yield return ARMOR_ENCHANT_MAX_S84;
                yield return ARMOR_ENCHANT_MAX_R;
                yield return ARMOR_ENCHANT_MAX_R95;
                yield return ARMOR_ENCHANT_MAX_R99; 
                yield return WEAPON_ENCHANT_TRY;
                yield return WEAPON_ENCHANT_TRY_D;
                yield return WEAPON_ENCHANT_TRY_C;
                yield return WEAPON_ENCHANT_TRY_B;
                yield return WEAPON_ENCHANT_TRY_S;
                yield return WEAPON_ENCHANT_TRY_S80;
                yield return WEAPON_ENCHANT_TRY_S84;
                yield return WEAPON_ENCHANT_TRY_R;
                yield return WEAPON_ENCHANT_TRY_R95;
                yield return WEAPON_ENCHANT_TRY_R99;
                yield return ARMOR_ENCHANT_TRY;
                yield return ARMOR_ENCHANT_TRY_D;
                yield return ARMOR_ENCHANT_TRY_C;
                yield return ARMOR_ENCHANT_TRY_B;
                yield return ARMOR_ENCHANT_TRY_S;
                yield return ARMOR_ENCHANT_TRY_S80;
                yield return ARMOR_ENCHANT_TRY_S84;
                yield return ARMOR_ENCHANT_TRY_R;
                yield return ARMOR_ENCHANT_TRY_R95;
                yield return ARMOR_ENCHANT_TRY_R99;
                yield return SS_CONSUMED;
                yield return SS_CONSUMED_D;
                yield return SS_CONSUMED_C;
                yield return SS_CONSUMED_B;
                yield return SS_CONSUMED_A;
                yield return SS_CONSUMED_S;
                yield return SS_CONSUMED_R;
                yield return PRIVATE_SELL_COUNT;
                yield return QUESTS_COMPLETED;
                yield return SPS_CONSUMED;
                yield return SPS_CONSUMED_D;
                yield return SPS_CONSUMED_C;
                yield return SPS_CONSUMED_B;
                yield return SPS_CONSUMED_A;
                yield return SPS_CONSUMED_S;
                yield return SPS_CONSUMED_R;
                yield return RESURRECTED_CHAR_COUNT;
                yield return RESURRECTED_BY_OTHER_COUNT;
                yield return DIE_COUNT;
                yield return MONSTERS_KILLED;
                yield return EXP_FROM_MONSTERS;
                yield return DAMAGE_TO_MONSTERS_MAX;
                yield return DAMAGE_TO_MONSTERS_MAX_SIGEL_KNIGHT;
                yield return DAMAGE_TO_MONSTERS_MAX_TYRR_WARRIOR;
                yield return DAMAGE_TO_MONSTERS_MAX_YUL_ARCHER;
                yield return DAMAGE_TO_MONSTERS_MAX_OTHELL_ROGUE;
                yield return DAMAGE_TO_MONSTERS_MAX_ISS_ENCHANTER;
                yield return DAMAGE_TO_MONSTERS_MAX_FEOH_WIZARD;
                yield return DAMAGE_TO_MONSTERS_MAX_WYNN_SUMMONER;
                yield return DAMAGE_TO_MONSTERS_MAX_AEORE_HEALER;
                yield return DAMAGE_TO_MONSTERS;
                yield return DAMAGE_TO_MONSTERS_SIGEL_KNIGHT;
                yield return DAMAGE_TO_MONSTERS_TYRR_WARRIOR;
                yield return DAMAGE_TO_MONSTERS_YUL_ARCHER;
                yield return DAMAGE_TO_MONSTERS_OTHELL_ROGUE;
                yield return DAMAGE_TO_MONSTERS_ISS_ENCHANTER;
                yield return DAMAGE_TO_MONSTERS_FEOH_WIZARD;
                yield return DAMAGE_TO_MONSTERS_WYNN_SUMMONER;
                yield return DAMAGE_TO_MONSTERS_AEORE_HEALER;
                yield return DAMAGE_FROM_MONSTERS;
                yield return DAMAGE_FROM_MONSTERS_SIGEL_KNIGHT;
                yield return DAMAGE_FROM_MONSTERS_TYRR_WARRIOR;
                yield return DAMAGE_FROM_MONSTERS_YUL_ARCHER;
                yield return DAMAGE_FROM_MONSTERS_OTHELL_ROGUE;
                yield return DAMAGE_FROM_MONSTERS_ISS_ENCHANTER;
                yield return DAMAGE_FROM_MONSTERS_FEOH_WIZARD;
                yield return DAMAGE_FROM_MONSTERS_WYNN_SUMMONER;
                yield return DAMAGE_FROM_MONSTERS_AEORE_HEALER;
                yield return KILLED_BY_MONSTER_COUNT;
                yield return EPIC_BOSS_KILLS;
                yield return EPIC_BOSS_KILLS_25774;
                yield return EPIC_BOSS_KILLS_25785;
                yield return EPIC_BOSS_KILLS_29195;
                yield return EPIC_BOSS_KILLS_25779;
                yield return EPIC_BOSS_KILLS_25866;
                yield return EPIC_BOSS_KILLS_29194;
                yield return EPIC_BOSS_KILLS_29218;
                yield return EPIC_BOSS_KILLS_29213;
                yield return EPIC_BOSS_KILLS_29196;
                yield return EPIC_BOSS_KILLS_25867;
                yield return EPIC_BOSS_KILLS_29212;
                yield return EPIC_BOSS_KILLS_29197;
                yield return PK_COUNT;
                yield return PVP_COUNT;
                yield return KILLED_BY_PK_COUNT;
                yield return KILLED_IN_PVP_COUNT;
                yield return DAMAGE_TO_PC_MAX;
                yield return DAMAGE_TO_PC_MAX_SIGEL_KNIGHT;
                yield return DAMAGE_TO_PC_MAX_TYRR_WARRIOR;
                yield return DAMAGE_TO_PC_MAX_YUL_ARCHER;
                yield return DAMAGE_TO_PC_MAX_OTHELL_ROGUE;
                yield return DAMAGE_TO_PC_MAX_ISS_ENCHANTER;
                yield return DAMAGE_TO_PC_MAX_FEOH_WIZARD;
                yield return DAMAGE_TO_PC_MAX_WYNN_SUMMONER;
                yield return DAMAGE_TO_PC_MAX_AEORE_HEALER;
                yield return DAMAGE_TO_PC;
                yield return DAMAGE_TO_PC_SIGEL_KNIGHT;
                yield return DAMAGE_TO_PC_TYRR_WARRIOR;
                yield return DAMAGE_TO_PC_YUL_ARCHER;
                yield return DAMAGE_TO_PC_OTHELL_ROGUE;
                yield return DAMAGE_TO_PC_ISS_ENCHANTER;
                yield return DAMAGE_TO_PC_FEOH_WIZARD;
                yield return DAMAGE_TO_PC_WYNN_SUMMONER;
                yield return DAMAGE_TO_PC_AEORE_HEALER;
                yield return DAMAGE_FROM_PC;
                yield return DAMAGE_FROM_PC_SIGEL_KNIGHT;
                yield return DAMAGE_FROM_PC_TYRR_WARRIOR;
                yield return DAMAGE_FROM_PC_YUL_ARCHER;
                yield return DAMAGE_FROM_PC_OTHELL_ROGUE;
                yield return DAMAGE_FROM_PC_ISS_ENCHANTER;
                yield return DAMAGE_FROM_PC_FEOH_WIZARD;
                yield return DAMAGE_FROM_PC_WYNN_SUMMONER;
                yield return DAMAGE_FROM_PC_AEORE_HEALER;
                yield return MEMBERS_COUNT;
                yield return INVITED_COUNT;
                yield return LEAVED_COUNT;
                yield return REPUTATION_COUNT;
                yield return ADENA_COUNT_IN_WH;
                yield return ALL_CLAN_PVP_COUNT;
                yield return CLAN_WAR_WIN_COUNT;

            }
        }
    }
}
